29 #include "stm32f4xx_hal.h"
30 #include "usbd_core.h"
51 GPIO_InitTypeDef GPIO_InitStruct;
53 if(hpcd->Instance == USB_OTG_FS)
56 __HAL_RCC_GPIOA_CLK_ENABLE();
59 GPIO_InitStruct.Pin = (GPIO_PIN_11 | GPIO_PIN_12);
60 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
61 GPIO_InitStruct.Pull = GPIO_NOPULL;
62 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
63 GPIO_InitStruct.Alternate = GPIO_AF10_OTG_FS;
64 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
67 GPIO_InitStruct.Pin = GPIO_PIN_9;
68 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
69 GPIO_InitStruct.Pull = GPIO_NOPULL;
70 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
73 GPIO_InitStruct.Pin = GPIO_PIN_10;
74 GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
75 GPIO_InitStruct.Pull = GPIO_PULLUP;
76 GPIO_InitStruct.Alternate = GPIO_AF10_OTG_FS;
77 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
80 __HAL_RCC_USB_OTG_FS_CLK_ENABLE();
83 HAL_NVIC_SetPriority(OTG_FS_IRQn, 6, 0);
86 HAL_NVIC_EnableIRQ(OTG_FS_IRQn);
89 else if(hpcd->Instance == USB_OTG_HS)
91 #ifdef USE_USB_HS_IN_FS
94 __HAL_RCC_GPIOB_CLK_ENABLE();
97 GPIO_InitStruct.Pin = GPIO_PIN_12 | GPIO_PIN_14 |GPIO_PIN_15;
98 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
99 GPIO_InitStruct.Pull = GPIO_NOPULL;
100 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
101 GPIO_InitStruct.Alternate = GPIO_AF12_OTG_HS_FS;
102 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
105 GPIO_InitStruct.Pin = GPIO_PIN_13;
106 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
107 GPIO_InitStruct.Pull = GPIO_NOPULL;
108 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
109 GPIO_InitStruct.Pull = GPIO_NOPULL;
114 __HAL_RCC_GPIOA_CLK_ENABLE();
115 __HAL_RCC_GPIOB_CLK_ENABLE();
116 __HAL_RCC_GPIOC_CLK_ENABLE();
117 __HAL_RCC_GPIOH_CLK_ENABLE();
118 __HAL_RCC_GPIOI_CLK_ENABLE();
121 GPIO_InitStruct.Pin = GPIO_PIN_5;
122 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
123 GPIO_InitStruct.Pull = GPIO_NOPULL;
124 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
125 GPIO_InitStruct.Alternate = GPIO_AF10_OTG_HS;
126 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
129 GPIO_InitStruct.Pin = GPIO_PIN_3;
130 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
131 GPIO_InitStruct.Pull = GPIO_NOPULL;
132 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
133 GPIO_InitStruct.Alternate = GPIO_AF10_OTG_HS;
134 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
137 GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_5 |\
138 GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13;
139 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
140 GPIO_InitStruct.Pull = GPIO_NOPULL;
141 GPIO_InitStruct.Alternate = GPIO_AF10_OTG_HS;
142 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
145 GPIO_InitStruct.Pin = GPIO_PIN_0;
146 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
147 GPIO_InitStruct.Pull = GPIO_NOPULL;
148 GPIO_InitStruct.Alternate = GPIO_AF10_OTG_HS;
149 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
152 GPIO_InitStruct.Pin = GPIO_PIN_4;
153 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
154 GPIO_InitStruct.Pull = GPIO_NOPULL;
155 GPIO_InitStruct.Alternate = GPIO_AF10_OTG_HS;
156 HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
159 GPIO_InitStruct.Pin = GPIO_PIN_11;
160 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
161 GPIO_InitStruct.Pull = GPIO_NOPULL;
162 GPIO_InitStruct.Alternate = GPIO_AF10_OTG_HS;
163 HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);
166 __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE();
170 __HAL_RCC_USB_OTG_HS_CLK_ENABLE();
173 HAL_NVIC_SetPriority(OTG_HS_IRQn, 6, 0);
176 HAL_NVIC_EnableIRQ(OTG_HS_IRQn);
187 if(hpcd->Instance == USB_OTG_FS)
190 __HAL_RCC_USB_OTG_FS_CLK_DISABLE();
191 __HAL_RCC_SYSCFG_CLK_DISABLE();
193 else if(hpcd->Instance == USB_OTG_HS)
196 __HAL_RCC_USB_OTG_HS_CLK_DISABLE();
197 __HAL_RCC_SYSCFG_CLK_DISABLE();
213 USBD_LL_SetupStage(hpcd->pData, (uint8_t *)hpcd->Setup);
224 USBD_LL_DataOutStage(hpcd->pData, epnum, hpcd->OUT_ep[epnum].xfer_buff);
235 USBD_LL_DataInStage(hpcd->pData, epnum, hpcd->IN_ep[epnum].xfer_buff);
245 USBD_LL_SOF(hpcd->pData);
255 USBD_SpeedTypeDef speed = USBD_SPEED_FULL;
258 switch(hpcd->Init.speed)
261 speed = USBD_SPEED_HIGH;
265 speed = USBD_SPEED_FULL;
269 speed = USBD_SPEED_FULL;
272 USBD_LL_SetSpeed(hpcd->pData, speed);
275 USBD_LL_Reset(hpcd->pData);
285 USBD_LL_Suspend(hpcd->pData);
295 USBD_LL_Resume(hpcd->pData);
306 USBD_LL_IsoOUTIncomplete(hpcd->pData, epnum);
317 USBD_LL_IsoINIncomplete(hpcd->pData, epnum);
327 USBD_LL_DevConnected(hpcd->pData);
337 USBD_LL_DevDisconnected(hpcd->pData);
351 NVIC_SetPriority (SysTick_IRQn, 0);
355 hpcd.Instance = USB_OTG_FS;
356 hpcd.Init.dev_endpoints = 4;
357 hpcd.Init.use_dedicated_ep1 = 0;
358 hpcd.Init.ep0_mps = 0x40;
359 hpcd.Init.dma_enable = 0;
360 hpcd.Init.low_power_enable = 0;
361 hpcd.Init.phy_itface = PCD_PHY_EMBEDDED;
362 hpcd.Init.Sof_enable = 0;
363 hpcd.Init.speed = PCD_SPEED_FULL;
364 hpcd.Init.vbus_sensing_enable = DISABLE;
371 HAL_PCDEx_SetRxFiFo(&
hpcd, 0x80);
372 HAL_PCDEx_SetTxFiFo(&
hpcd, 0, 0x40);
373 HAL_PCDEx_SetTxFiFo(&
hpcd, 1, 0x80);
379 hpcd.Instance = USB_OTG_HS;
380 hpcd.Init.dev_endpoints = 6;
381 hpcd.Init.use_dedicated_ep1 = 0;
382 hpcd.Init.ep0_mps = 0x40;
389 hpcd.Init.dma_enable = 0;
391 hpcd.Init.low_power_enable = 0;
393 #ifdef USE_USB_HS_IN_FS
394 hpcd.Init.phy_itface = PCD_PHY_EMBEDDED;
395 hpcd.Init.speed = PCD_SPEED_HIGH_IN_FULL;
397 hpcd.Init.phy_itface = PCD_PHY_ULPI;
398 hpcd.Init.speed = PCD_SPEED_HIGH;
400 hpcd.Init.Sof_enable = 0;
401 hpcd.Init.vbus_sensing_enable = DISABLE;
408 HAL_PCDEx_SetRxFiFo(&
hpcd, 0x200);
409 HAL_PCDEx_SetTxFiFo(&
hpcd, 0, 0x80);
410 HAL_PCDEx_SetTxFiFo(&
hpcd, 1, 0x174);
424 HAL_PCD_DeInit(pdev->pData);
435 HAL_PCD_Start(pdev->pData);
446 HAL_PCD_Stop(pdev->pData);
463 HAL_PCD_EP_Open(pdev->pData, ep_addr, ep_mps, ep_type);
475 HAL_PCD_EP_Close(pdev->pData, ep_addr);
487 HAL_PCD_EP_Flush(pdev->pData, ep_addr);
499 HAL_PCD_EP_SetStall(pdev->pData, ep_addr);
511 HAL_PCD_EP_ClrStall(pdev->pData, ep_addr);
523 PCD_HandleTypeDef *
hpcd = pdev->pData;
525 if((ep_addr & 0x80) == 0x80)
527 return hpcd->IN_ep[ep_addr & 0x7F].is_stall;
531 return hpcd->OUT_ep[ep_addr & 0x7F].is_stall;
543 HAL_PCD_SetAddress(pdev->pData, dev_addr);
560 HAL_PCD_EP_Transmit(pdev->pData, ep_addr, pbuf, size);
577 HAL_PCD_EP_Receive(pdev->pData, ep_addr, pbuf, size);
588 return HAL_PCD_EP_GetRxCount(pdev->pData, ep_addr);